const redis = require('redis')
const config = require('../config/config')

const client = redis.createClient(config.redis.RDS_PORT, config.redis.RDS_HOST, config.redis.RDS_OPTS)

client.on('error', function (err) {
  console.error('redis error event - ' + redis.host + ':' + redis.port + ' - ' + err)
})

//创建类
class redisCache {
  //创建set方法
  //@key = 属性名
  //@value = 属性值
  //@expire = 过期时间（秒计
  set(key, value, expire) {
    //这里就是promise回调
    return new Promise(function (callback, errback) {
      //新建一个键值对保存到redis
      client.set(key, value, function (err, result) {
        if (err) {
          //保存失败
          console.error(err)
          return
        }
        //如果expire存在的话，再设置一下这个键值对的过期时间
        if (!isNaN(expire) && expire > 0) {
          client.expire(key, parseInt(expire))
        } else {
          client.expire(key, parseInt(86400))
        }
        //回调
        callback(result)
      })
    })
  }
  //取出一个之前存储过的键值对
  //@key = 属性名，也就是键值对的键名
  get(key) {
    return new Promise(function (callback, errback) {
      client.get(key, function (err, result) {
        if (err) return

        callback(result)
      })
    })
  }
  del(key) {
    return new Promise(function (callback, errback) {
      client.del(key, function (err, result) {
        if (err) return

        callback(result)
      })
    })
  }
}
//输出Cache类
module.exports = redisCache

// ==================  使用说明  ==================
// const redis = require('../redis') //引用的文件
// const redi = new redis() //实例化Cache类

//存储一个键名为 abc，键值为 123，过期时间为七天的键值对
// redi.set('abc', '123', 604800).then((ret) => {
//   console.log(ret)
// })

//把上面存的键名为 abc的键值对取出来
// redi.get("abc").then(ret=>{
//     console.log(ret)
// })
